package com.cskaoyan.javase.oop1._11static._3usecase;

/**
 * 静态成员变量：
 *      1.属于全体对象所共享而不是独属于某个对象的成员变量
 *      2.在整个类全局独一份的（因为类加载只有一次）
 * 所以当存在需要所有对象共享的变量时，应该使用static修饰的静态成员变量。
 * 所以，如果希望某个变量在类的全局独一份时，应该使用static修饰的静态成员变量。
 *
 * 静态成员方法:
 *      最大的优点是调用非常方便,不需要创建对象,直接类名点调用
 *      根据静态成员方法调用简单的特点，当一个类中全部都是静态成员方法时，
 *      类中的所有方法的调用都可以使用类名点去完成，这就是Java当中的"工具类"。
 *      比较典型的有：数组工具类Arrays、集合工具类Collections、数学工具类Math等等。
 *              Objects(对象工具类)
 *
 * @since 16:00
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            Student s = new Student();
            System.out.println("第" + (i + 1) + "次创建的对象,它的编号是:" + s.id);
        }
        System.out.println(Student.count);
    }
}

class Student {
    // 需求1: 请统计Student类在外部new对象的次数
    static int count = 0;

    // 需求2: 现在要给学生对象统一编号,编号从10001开始,每创建一个新对象编号就加1
    // 属于对象的,唯一的编号,定义为成员变量
    int id;
    static int initId = 10001;

    public Student() {
        // id = 10001 + count;
        count++;
        id = initId++;
        // initId++;
    }
}